{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# A graphical example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tensorflow import keras\n",
    "import utils\n",
    "\n",
    "# Setting random seeds to get reproducible results\n",
    "np.random.seed(0)\n",
    "import tensorflow as tf\n",
    "tf.random.set_seed(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading the dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Loading the one_circle dataset\n",
    "\n",
    "df = pd.read_csv('one_circle.csv', index_col=0)\n",
    "x = np.array(df[['x_1', 'x_2']])\n",
    "y = np.array(df['y']).astype(int)\n",
    "utils.plot_points(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x_1</th>\n",
       "      <th>x_2</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.759416</td>\n",
       "      <td>2.753240</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.885278</td>\n",
       "      <td>1.629527</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.463302</td>\n",
       "      <td>-1.023869</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.986004</td>\n",
       "      <td>-0.898810</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.010834</td>\n",
       "      <td>-2.580117</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>105</th>\n",
       "      <td>-1.376637</td>\n",
       "      <td>2.778703</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>-0.703722</td>\n",
       "      <td>0.215382</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>0.729767</td>\n",
       "      <td>-2.479655</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>-1.715920</td>\n",
       "      <td>-0.393404</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>109</th>\n",
       "      <td>2.382873</td>\n",
       "      <td>-2.951074</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>110 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          x_1       x_2  y\n",
       "0   -0.759416  2.753240  0\n",
       "1   -1.885278  1.629527  0\n",
       "2    2.463302 -1.023869  0\n",
       "3   -1.986004 -0.898810  0\n",
       "4    2.010834 -2.580117  0\n",
       "..        ...       ... ..\n",
       "105 -1.376637  2.778703  1\n",
       "106 -0.703722  0.215382  1\n",
       "107  0.729767 -2.479655  1\n",
       "108 -1.715920 -0.393404  1\n",
       "109  2.382873 -2.951074  0\n",
       "\n",
       "[110 rows x 3 columns]"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.759416  ,  2.7532401 ],\n",
       "       [-1.8852779 ,  1.62952654],\n",
       "       [ 2.46330243, -1.02386888],\n",
       "       [-1.98600415, -0.89880979],\n",
       "       [ 2.01083403, -2.58011745],\n",
       "       [ 2.41018752,  2.37050087],\n",
       "       [ 1.59914005, -0.86273162],\n",
       "       [-1.10985644, -2.46969746],\n",
       "       [ 2.4473419 ,  2.81117994],\n",
       "       [-1.69773161,  2.53984757]])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Preprocessing the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [1., 0.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [0., 1.],\n",
       "       [1., 0.]], dtype=float32)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Categorizing the output\n",
    "\n",
    "from tensorflow.keras.utils import to_categorical\n",
    "categorized_y = np.array(to_categorical(y, 2))\n",
    "categorized_y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Building and compiling the neural network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_5\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_15 (Dense)             (None, 128)               384       \n",
      "_________________________________________________________________\n",
      "dropout_10 (Dropout)         (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "dense_16 (Dense)             (None, 64)                8256      \n",
      "_________________________________________________________________\n",
      "dropout_11 (Dropout)         (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_17 (Dense)             (None, 2)                 130       \n",
      "=================================================================\n",
      "Total params: 8,770\n",
      "Trainable params: 8,770\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# Imports\n",
    "#import numpy as np\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense, Dropout\n",
    "#from tensorflow.keras.layers import Dense, Dropout, Activation\n",
    "#from tensorflow.keras.optimizers import SGD\n",
    "\n",
    "# Building the model\n",
    "model = Sequential()\n",
    "model.add(Dense(128, activation='relu', input_shape=(2,)))\n",
    "model.add(Dropout(.2))\n",
    "model.add(Dense(64, activation='relu'))\n",
    "model.add(Dropout(.2))\n",
    "model.add(Dense(2, activation='softmax'))\n",
    "\n",
    "# Compiling the model\n",
    "model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Training the neural network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "11/11 [==============================] - 0s 1ms/step - loss: 0.5473 - accuracy: 0.7182\n",
      "Epoch 2/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4621 - accuracy: 0.7636\n",
      "Epoch 3/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4521 - accuracy: 0.7636\n",
      "Epoch 4/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.4379 - accuracy: 0.7636\n",
      "Epoch 5/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4411 - accuracy: 0.7636\n",
      "Epoch 6/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4207 - accuracy: 0.7636\n",
      "Epoch 7/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4428 - accuracy: 0.7636\n",
      "Epoch 8/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.4345 - accuracy: 0.7636\n",
      "Epoch 9/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4311 - accuracy: 0.7636\n",
      "Epoch 10/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.4182 - accuracy: 0.7636\n",
      "Epoch 11/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4099 - accuracy: 0.7636\n",
      "Epoch 12/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3991 - accuracy: 0.7636\n",
      "Epoch 13/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4048 - accuracy: 0.7636\n",
      "Epoch 14/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.4144 - accuracy: 0.7636\n",
      "Epoch 15/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.3885 - accuracy: 0.7727\n",
      "Epoch 16/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3942 - accuracy: 0.7818\n",
      "Epoch 17/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3835 - accuracy: 0.7818\n",
      "Epoch 18/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3834 - accuracy: 0.7909\n",
      "Epoch 19/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3845 - accuracy: 0.8000\n",
      "Epoch 20/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3775 - accuracy: 0.8091\n",
      "Epoch 21/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3699 - accuracy: 0.8000\n",
      "Epoch 22/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3533 - accuracy: 0.8182\n",
      "Epoch 23/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3696 - accuracy: 0.8091\n",
      "Epoch 24/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3713 - accuracy: 0.8364\n",
      "Epoch 25/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3525 - accuracy: 0.8182\n",
      "Epoch 26/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.3361 - accuracy: 0.8636\n",
      "Epoch 27/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.3723 - accuracy: 0.8455\n",
      "Epoch 28/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.3350 - accuracy: 0.8636\n",
      "Epoch 29/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3405 - accuracy: 0.8545\n",
      "Epoch 30/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3255 - accuracy: 0.8636\n",
      "Epoch 31/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.3232 - accuracy: 0.8636\n",
      "Epoch 32/100\n",
      "11/11 [==============================] - ETA: 0s - loss: 0.1914 - accuracy: 0.90 - 0s 2ms/step - loss: 0.2936 - accuracy: 0.9000\n",
      "Epoch 33/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2992 - accuracy: 0.8818\n",
      "Epoch 34/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3303 - accuracy: 0.8818\n",
      "Epoch 35/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3193 - accuracy: 0.8727\n",
      "Epoch 36/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3153 - accuracy: 0.8818\n",
      "Epoch 37/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2988 - accuracy: 0.9182\n",
      "Epoch 38/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2960 - accuracy: 0.8909\n",
      "Epoch 39/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3078 - accuracy: 0.8909\n",
      "Epoch 40/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2856 - accuracy: 0.9000\n",
      "Epoch 41/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3193 - accuracy: 0.9000\n",
      "Epoch 42/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.3021 - accuracy: 0.9000\n",
      "Epoch 43/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2905 - accuracy: 0.8818\n",
      "Epoch 44/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2607 - accuracy: 0.9455\n",
      "Epoch 45/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2814 - accuracy: 0.8818\n",
      "Epoch 46/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2761 - accuracy: 0.8909\n",
      "Epoch 47/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2864 - accuracy: 0.9000\n",
      "Epoch 48/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2983 - accuracy: 0.9000\n",
      "Epoch 49/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2940 - accuracy: 0.8727\n",
      "Epoch 50/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2607 - accuracy: 0.9091\n",
      "Epoch 51/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2982 - accuracy: 0.9091\n",
      "Epoch 52/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2846 - accuracy: 0.9091\n",
      "Epoch 53/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2499 - accuracy: 0.9091\n",
      "Epoch 54/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2575 - accuracy: 0.8909\n",
      "Epoch 55/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2647 - accuracy: 0.8909\n",
      "Epoch 56/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2918 - accuracy: 0.8818\n",
      "Epoch 57/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2560 - accuracy: 0.9091\n",
      "Epoch 58/100\n",
      "11/11 [==============================] - 0s 1ms/step - loss: 0.2359 - accuracy: 0.9273\n",
      "Epoch 59/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2852 - accuracy: 0.8909\n",
      "Epoch 60/100\n",
      "11/11 [==============================] - 0s 1ms/step - loss: 0.2460 - accuracy: 0.9273\n",
      "Epoch 61/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2545 - accuracy: 0.8909\n",
      "Epoch 62/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2640 - accuracy: 0.8909\n",
      "Epoch 63/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2701 - accuracy: 0.9091\n",
      "Epoch 64/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2574 - accuracy: 0.8818\n",
      "Epoch 65/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2504 - accuracy: 0.9091\n",
      "Epoch 66/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2388 - accuracy: 0.8909\n",
      "Epoch 67/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2721 - accuracy: 0.9091\n",
      "Epoch 68/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2674 - accuracy: 0.8727\n",
      "Epoch 69/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2709 - accuracy: 0.9182\n",
      "Epoch 70/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2548 - accuracy: 0.9182\n",
      "Epoch 71/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2035 - accuracy: 0.9273\n",
      "Epoch 72/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2588 - accuracy: 0.9091\n",
      "Epoch 73/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2465 - accuracy: 0.8818\n",
      "Epoch 74/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2741 - accuracy: 0.8909\n",
      "Epoch 75/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2446 - accuracy: 0.9000\n",
      "Epoch 76/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2308 - accuracy: 0.9182\n",
      "Epoch 77/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2535 - accuracy: 0.9000\n",
      "Epoch 78/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2736 - accuracy: 0.8455\n",
      "Epoch 79/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2279 - accuracy: 0.9091\n",
      "Epoch 80/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.1964 - accuracy: 0.9455\n",
      "Epoch 81/100\n",
      "11/11 [==============================] - 0s 6ms/step - loss: 0.2493 - accuracy: 0.9091\n",
      "Epoch 82/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2541 - accuracy: 0.9091\n",
      "Epoch 83/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2380 - accuracy: 0.9091\n",
      "Epoch 84/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2462 - accuracy: 0.9182\n",
      "Epoch 85/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2254 - accuracy: 0.9273\n",
      "Epoch 86/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2648 - accuracy: 0.9000\n",
      "Epoch 87/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2347 - accuracy: 0.9091\n",
      "Epoch 88/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2449 - accuracy: 0.9091\n",
      "Epoch 89/100\n",
      "11/11 [==============================] - 0s 14ms/step - loss: 0.2565 - accuracy: 0.9091\n",
      "Epoch 90/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2498 - accuracy: 0.9000\n",
      "Epoch 91/100\n",
      "11/11 [==============================] - 0s 4ms/step - loss: 0.2420 - accuracy: 0.8818\n",
      "Epoch 92/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2299 - accuracy: 0.8909\n",
      "Epoch 93/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2244 - accuracy: 0.9182\n",
      "Epoch 94/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2345 - accuracy: 0.8909\n",
      "Epoch 95/100\n",
      "11/11 [==============================] - 0s 3ms/step - loss: 0.2574 - accuracy: 0.8909\n",
      "Epoch 96/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2499 - accuracy: 0.9091\n",
      "Epoch 97/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2246 - accuracy: 0.9000\n",
      "Epoch 98/100\n",
      "11/11 [==============================] - 0s 5ms/step - loss: 0.2593 - accuracy: 0.9000\n",
      "Epoch 99/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2133 - accuracy: 0.9182\n",
      "Epoch 100/100\n",
      "11/11 [==============================] - 0s 2ms/step - loss: 0.2110 - accuracy: 0.9000\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x6450a0d90>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Training the model\n",
    "model.fit(x, categorized_y, epochs=100, batch_size=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plotting the results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "utils.plot_model(x, y, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
